#ifndef DIRECT_METHOD_H_
#define DIRECT_METHOD_H_

#include "types.h"

#include <opencv2/opencv.hpp>
#include <Eigen/Core>
#include <sophus/se3.hpp>

using namespace std;

/**
 * pose estimation using direct method
 * @param img1
 * @param img2
 * @param px_ref
 * @param depth_ref
 * @param T21
 */
void DirectPoseEstimationMultiLayer(const cv::Mat &img1,
                                    const cv::Mat &img2,
                                    const VecVector2d &px_ref,
                                    const vector<double> depth_ref,
                                    Sophus::SE3d &T21);

/**
 * pose estimation using direct method
 * @param img1
 * @param img2
 * @param px_ref
 * @param depth_ref
 * @param T21
 */
void DirectPoseEstimationSingleLayer(const cv::Mat &img1,
                                     const cv::Mat &img2,
                                     const VecVector2d &px_ref,
                                     const vector<double> depth_ref,
                                     Sophus::SE3d &T21);

#endif
